package utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author: Lishuai
 * @date: 2018/8/19 16:34
 * @description
 */
public class JSONUtils {
    private static SerializeConfig mapping = new SerializeConfig();
    protected static Logger logger = LoggerFactory.getLogger(JSONUtils.class);
    private static String dateFormat;
    static {
        dateFormat = "yyyy-MM-dd HH:mm:ss";
    }

    /**
     * 把json string 转化成类对象
     *
     * @param str
     * @param t
     * @return
     */
    public static <T> T parseObject(String str, Class<T> t) {
        try {
            if (str != null && !"".equals(str.trim())) {
                T res = JSONArray.parseObject(str.trim(), t);
                return res;
            }
        } catch (Exception e) {
            logger.error("数据转换出错", "exception:", e.getMessage());
        }
        return null;
    }

    /**
     * 把json string 转化成类对象
     *
     * @param str
     * @param t
     * @return
     */
    public static <T> List<T> parseArray(String str, Class<T> t) {
        try {
            if (str != null && !"".equals(str.trim())) {
                List<T> res = JSONArray.parseArray(str.trim(), t);
                return res;
            }
        } catch (Exception e) {
            logger.error("数据转换出错", "exception:", e.getMessage());
        }
        return null;
    }
    /**
     * 把json string 转化成类对象
     *
     * @param str
     * @param t
     * @return
     */
    public static <T> List<T> parseArrayMap(String str, Class<Map> t) {
        try {
            if (str != null && !"".equals(str.trim())) {
                List<T> res = JSONArray.parseArray(str.trim(), (Class<T>) t);
                return res;
            }
        } catch (Exception e) {
            logger.error("数据转换出错", "exception:", e.getMessage());
        }
        return null;
    }

    /**
     * 把类对象转化成json string
     *
     * @param t
     * @return
     */
    public static <T> String toJson(T t) {
        try {
            return JSONObject.toJSONString(t);
        } catch (Exception e) {
            logger.error("数据转换出错", "exception:", e.getMessage());
        }
        return null;
    }

    /**
     * 自定义时间格式
     * @param t
     * @return
     */
    public static <T> String toJson(T t,String dateFormat) {
        try {
            mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat));
            return JSONObject.toJSONString(t,mapping);
        } catch (Exception e) {
            logger.error("数据转换出错", "exception:", e.getMessage());
        }
        return null;
    }

    /**
     * 把类对象转化成json Map
     *
     * @param json
     * @return
     */
    public static Map<String, String> json2Map(String json) {
        try {
            return JSON.parseObject(json, Map.class);
        } catch (Exception e) {
            logger.error("数据转换出错", "exception:", e.getMessage());
        }
        return null;
    }
}
